home *** CD-ROM | disk | FTP | other *** search
/ Chip 2000 February / OpenLinux 2.3 CD.iso / col / bin / mini-lisa < prev    next >
Encoding:
Text File  |  1998-08-18  |  6.7 KB  |  411 lines

  1. #!/bin/sh 
  2. # $Id: mini-lisa,v 1.9 1998/08/18 14:10:47 ray Exp $
  3.  
  4. #
  5. # Init setup
  6. #
  7. DIR_INIT_CONF=/etc/rc.d
  8. DIR_INFO=/usr/info
  9. CMD_INSTALL_INFO=/usr/bin/install-info
  10. CMD_INETDCONF=/usr/lib/LST/inetdconf.pl
  11.  
  12. unset GZIP
  13.  
  14. Debug()
  15. {
  16.   echo "$@" 1>&2
  17. }
  18.  
  19. Print_Usage()
  20. {
  21.   cat <<'EOF' 1>&2
  22. mini-lisa <area> command parameters...
  23. Areas:
  24.   --SysVinit   reads further information from STDIN
  25.  
  26.   --SysV-init
  27.     install <subsys> S<ss> <level>[:<level>]... K<kk> <level>[:<level>]...
  28.     remove <subsys> <trigger>
  29.  
  30.   --info
  31.     install <topic> [--section "<string>"] [--entry "<string>"]
  32.     remove <topic> <trigger>
  33.  
  34.   --inetd
  35.     install <service name> <socket type> <protocol> \
  36.     (wait|nowait[.<max>]) <user>[.<group>] \
  37.     <server program> <server program arguments> ...
  38.     install <service name>/<version> <socket type> rpc/<protocol> \
  39.     (wait|nowait[.<max>]) <user>[.<group>] \
  40.     <server program> <server program arguments> ...
  41.     remove <service name>[/<version>] <trigger>
  42.     enable <service name>[/<version>] <trigger>
  43.     disable <service name>[/<version>] <trigger>
  44.  
  45.   --user
  46.     create <name> <uid> <gid> <gcos> <home> <shell>
  47.     revoke <uname> <trigger>
  48.  
  49.   --group
  50.     create <gname> <gid> [<initial_member> ...]
  51.     join <gname> <uname>
  52.     leave <gname> <uname> <trigger>
  53.     revoke <gname> <trigger>
  54.  
  55. EOF
  56.   return 1
  57. }
  58.  
  59. Print_Usage_Exit()
  60. {
  61.   Print_Usage
  62.   exit 1
  63. }
  64.  
  65. Do_SysVinit()
  66. {
  67.   local script=
  68.   local callname=
  69.   local levels=
  70.  
  71.   while read script callname levels; do
  72.     for i in `echo $levels | sed -e 's/:/ /g'`; do
  73.       mkdir -p $DIR_INIT_CONF/rc$i.d >/dev/tty8 2>&1
  74.       ln -sf ../init.d/$script $DIR_INIT_CONF/rc$i.d/$callname >/dev/tty8 2>&1
  75.     done
  76.   done
  77. }
  78.  
  79. Do_SysVinit_install()
  80. {
  81.   local subsys="$1"
  82.   local start="$2$1"
  83.   local slevels="$3"
  84.   local stop="$4$1"
  85.   local klevels="$5"
  86.  
  87.   # consistency check
  88.   #FIXME!?
  89.  
  90.   # cleanup
  91.   Do_SysVinit_remove $subsys 0
  92.  
  93.   # create start- and stoplinks
  94.   local name=$start
  95.   for l in $slevels $klevels; do
  96.     for i in `echo $l | sed -e 's/:/ /g'`; do
  97.       [ -d $DIR_INIT_CONF/rc$i.d ] || mkdir -p $DIR_INIT_CONF/rc$i.d
  98.       ln -sf ../init.d/$subsys $DIR_INIT_CONF/rc$i.d/$name
  99.     done
  100.     name=$stop
  101.   done
  102. }
  103.  
  104. Do_SysVinit_remove()
  105. {
  106.   local subsys="$1"
  107.   local trigger="$2"
  108.  
  109.   [ "$trigger" != "0" ] && return 0
  110.  
  111.   # consistency check
  112.   #FIXME!?
  113.  
  114.   rm -f $DIR_INIT_CONF/rc?.d/[SK][0-9][0-9]$subsys
  115. }
  116.  
  117. Info_FindFile()
  118. {
  119.   local topic=$1
  120.   local file
  121.  
  122.   if [ -n "`echo $topic | sed -n 's:^/.*$:OK:p'`" ]; then
  123.     if [ -r $topic ]; then
  124.       file=$topic
  125.     elif [ -r $topic.info ]; then
  126.       file=$topic.info
  127.     elif [ -r $topic.gz ]; then
  128.       file=$topic.gz
  129.     elif [ -r $topic.info.gz ]; then
  130.       file=$topic.info.gz
  131.     fi
  132.   elif [ -r $DIR_INFO/$topic ]; then
  133.     file=$DIR_INFO/$topic
  134.   elif [ -r $DIR_INFO/$topic.info ]; then
  135.     file=$DIR_INFO/$topic.info
  136.   elif [ -r $DIR_INFO/$topic.gz ]; then
  137.     file=$DIR_INFO/$topic.gz
  138.   elif [ -r $DIR_INFO/$topic.info.gz ]; then
  139.     file=$DIR_INFO/$topic.info.gz
  140.   fi
  141.   echo $file
  142. }
  143.  
  144. Do_Info_install()
  145. {
  146.   Check_Info_Not_OLD || { Do_Info_install_OLD "$@"; return $?; }
  147.  
  148.   local topic="$1"; shift
  149.   local file
  150.  
  151.   # consistency check
  152.   #FIXME!?
  153.  
  154.   file=`Info_FindFile $topic`
  155.  
  156.   if [ -z "$file" ] || [ ! -r "$file" ]; then
  157.     Debug "Do_Info_install $topic not found"
  158.     return 1
  159.   fi
  160.  
  161.   $CMD_INSTALL_INFO "$@" $file $DIR_INFO/dir
  162.   return 0
  163. }
  164.  
  165. Do_Info_remove()
  166. {
  167.   Check_Info_Not_OLD || { Do_Info_remove_OLD "$@"; return $?; }
  168.  
  169.   local topic="$1"; shift
  170.   local trigger="$1"; shift
  171.   local file
  172.  
  173.   [ "$trigger" != "0" ] && return 0
  174.  
  175.   # consistency check
  176.   #FIXME!?
  177.  
  178.   file=`Info_FindFile $topic`
  179.  
  180.   if [ -z "$file" ] || [ ! -r "$file" ]; then
  181.     Debug "Do_Info_remove $topic not found"
  182.     return 1
  183.   fi
  184.  
  185.   $CMD_INSTALL_INFO --remove $file $DIR_INFO/dir
  186.   return 0
  187. }
  188.  
  189. # backward-compatibility ...
  190. Check_Info_Not_OLD()
  191. {
  192.   local v=`$CMD_INSTALL_INFO --version | sed -n '1s/^[^0-9]*//p'`
  193.   [ "$v" != "3.11" ] && return 0
  194.   return 1
  195. }
  196.  
  197. Info_GetCmd()
  198. {
  199.   local file="$1"
  200.   local cmd=cat
  201.  
  202.   [ -n "`echo $file | sed -n 's/^.*\.gz$/OK/p'`" ] &&
  203.     cmd=zcat
  204.   echo $cmd
  205. }
  206.  
  207. Do_Info_install_OLD()
  208. {
  209.   local topic="$1"; shift
  210.   local file
  211.   local cmd
  212.  
  213.   # consistency check
  214.   #FIXME!?
  215.  
  216.   file=`Info_FindFile $topic`
  217.   cmd=`Info_GetCmd $file`
  218.  
  219.   if [ -z "$file" ] || [ ! -r "$file" ]; then
  220.     Debug "Do_Info_install $1 not found"
  221.     return 1
  222.   fi
  223.  
  224.   $cmd $file | $CMD_INSTALL_INFO "$@" - $DIR_INFO/dir
  225.   return 0
  226. }
  227.  
  228. Do_Info_remove_OLD()
  229. {
  230.   local topic="$1"
  231.   local trigger="$2"
  232.   local file
  233.   local cmd
  234.  
  235.   [ "$trigger" != "0" ] && return 0
  236.  
  237.   # consistency check
  238.   #FIXME!?
  239.  
  240.   file=`Info_FindFile $topic`
  241.   cmd=`Info_GetCmd $file`
  242.  
  243.   if [ -z "$file" ] || [ ! -r "$file" ]; then
  244.     Debug "Do_Info_remove $1 not found"
  245.     return 1
  246.   fi
  247.  
  248.   $cmd $file | $CMD_INSTALL_INFO --remove - $DIR_INFO/dir
  249.   return 0
  250. }
  251.  
  252. Do_Inetd_install()
  253. {
  254.   # consistency check in inetdconf!?
  255.  
  256.   $CMD_INETDCONF --add "$@"
  257. }
  258.  
  259. Do_Inetd_remove()
  260. {
  261.   local service="$1"
  262.   local trigger="$2"
  263.  
  264.   [ "$trigger" != "0" ] && return 0
  265.  
  266.   # further consistency check in inetdconf!?
  267.  
  268.   $CMD_INETDCONF --remove "$service"
  269. }
  270.  
  271. Do_Inetd()
  272. {
  273.   local command="$1"; shift
  274.  
  275.   case "$command" in
  276.   "install"|"remove")
  277.     Do_Inetd_${command} "$@"
  278.     return $?
  279.     ;;
  280.   "enable"|"disable")
  281.     [ $# -gt 0 ] && { local service=$1; shift; }
  282.     [ $# -gt 0 ] && { local trigger=$1; shift; }
  283.     [ "$trigger" != "0" ] && return 0
  284.     # further consistency check in inetdconf!?
  285.     $CMD_INETDCONF --$command "$service" "$@"
  286.     return $?
  287.     ;;
  288.   *)
  289.     Print_Usage
  290.     ;;
  291.   esac
  292. }
  293.  
  294. Do_User()
  295. {
  296.   local command="$1"; shift
  297.  
  298.   case "$command" in
  299.   "create")
  300.     false
  301.     ;;
  302.   "revoke")
  303.     false
  304.     ;;
  305.   *)
  306.     Print_Usage
  307.     ;;
  308.   esac
  309. }
  310.  
  311. Do_Group_Join()
  312. {
  313.   local gname="$1"; shift
  314.   local i
  315.  
  316.   for i in "$@"; do
  317.     false
  318.   done
  319.   false
  320. }
  321.  
  322. Do_Group_Leave()
  323. {
  324.   false
  325. }
  326.  
  327. Do_Group()
  328. {
  329.   local command="$1"; shift
  330.   local gname="$1"; shift
  331.  
  332.   case "$command" in
  333.   "create")
  334.     false
  335.     ;;
  336.   "join")
  337.     Do_Group_Join $gname "$@"
  338.     ;;
  339.   "leave")
  340.     [ "$1" != "0" ] && return 0; shift
  341.  
  342.     Do_Group_Leave $gname "$@"
  343.     ;;
  344.   "revoke")
  345.     [ "$1" != "0" ] && return 0; shift
  346.  
  347.     false
  348.     ;;
  349.   *)
  350.     Print_Usage
  351.     ;;
  352.   esac
  353. }
  354.  
  355. if [ $# -eq 0 ]; then
  356.   Print_Usage_Exit
  357. fi
  358.  
  359. Area=""
  360. case "$1" in
  361. "--SysVinit")
  362.   Do_SysVinit
  363.   exit $?
  364.   ;;
  365. "--SysV-init")
  366.   shift
  367.   Area="SysVinit"
  368.   ;;
  369. "--info")
  370.   shift
  371.   Area="Info"
  372.   ;;
  373. "--inetd")
  374.   shift
  375.   Area="Inetd"
  376.   ;;
  377. "--user")
  378.   shift
  379.   Area="User"
  380.   ;;
  381. "--group")
  382.   shift
  383.   Area="Group"
  384.   ;;
  385. *)
  386.   Print_Usage_Exit
  387.   ;;
  388. esac
  389.  
  390. [ -z "$Area" ] && Print_Usage_Exit
  391.  
  392. [ $# -gt 0 ] && { Command="$1"; shift; }
  393. case "$Area" in
  394. "User"|"Group"|"Inetd")
  395.   Do_${Area} $Command "$@"
  396.   exit $?
  397.   ;;
  398. esac
  399.  
  400. case "$Command" in
  401. "install"|"remove")
  402.   Do_${Area}_${Command} "$@"
  403.   exit $?
  404.   ;;
  405. esac
  406.  
  407.  
  408. Print_Usage_Exit
  409.  
  410.  
  411.